package top.jandmla.imagetest.service.Impl;

import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import top.jandmla.imagetest.service.ImageService;
import top.jandmla.imagetest.utils.ResponseResult;
import top.jandmla.imagetest.utils.ResponseType;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * <p>
 * 图片上传服务类
 * </p>
 */
@Service
public class ImageServiceImpl implements ImageService {

    //从配置文件中自动装配 文件储存地址
    @Value("${upload-file.image-path}")
    private String imagePath;

    //从配置文件中自动装配 文件映射地址
    @Value("${upload-file.image-mvc-path}")
    private String imageMvcPath;

    /**
     * 上传图片文件
     * @param file 图片文件
     * @return 上传结果
     */
    @Override
    public ResponseResult uploadImageFile(MultipartFile file) {
        //文件判空
        if (!file.isEmpty()){
            String filename = file.getOriginalFilename();
            //文件格式检测
            if (filename != null &&( filename.endsWith(".jpg") || filename.endsWith(".png"))){
                //给文件名添加时间戳
                StringBuilder name = new StringBuilder(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
                name.append("-") //时间戳和文件名的间隔符（下载时，防止以后需要此文件名）
                        .append(filename);
                //创建保存地址
                File image = FileUtils.getFile(imagePath + name);
                //设置访问路径
                StringBuilder url = new StringBuilder("/file")
                        .append(imageMvcPath)
                        .append(name);
                try {
                    //保存文件
//                    FileUtils.copyInputStreamToFile(file.getInputStream(), image);
                    file.transferTo(image);
                    //成功上传，返回映射地址

                    //todo 图片信息数据库存储
//                    需要储存数据库时，则在下面进行数据库储存
//                    此处只是展示图片上传和访问地址的配置，因此就不存储数据库信息了


                    return ResponseResult.success(url.toString());
                } catch (IOException e) {
                    return  ResponseResult.error(ResponseType.EXCEPTION,"文件储存异常");
                }
            }
            return ResponseResult.error(ResponseType.PARAM_ERROR,"文件格式不正确！");
        }
        return ResponseResult.error(ResponseType.PARAM_ERROR,"文件为空！");
    }
}
